package cn.wolfcode.wolf2w.listener;


import cn.wolfcode.wolf2w.domain.Strategy;
import cn.wolfcode.wolf2w.domain.StrategyStatisVO;
import cn.wolfcode.wolf2w.redis.IStrategyRedisService;
import cn.wolfcode.wolf2w.service.IStrategyService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

import org.springframework.stereotype.Component;

import java.util.List;


/*
 * redis数据初始化监听
 *
 * */
@Component
public class RedisDataInListener implements ApplicationListener<ContextRefreshedEvent> {

    @Autowired
    private IStrategyService strategyService;

    @Autowired
    private IStrategyRedisService strategyRedisService;

    /*
    * 当spring容器启动后，初始化完成后会马上进行下面的redis数据做初始化操作
    * 此时考虑，如果我们第一次初始化好数据时，等到第二此启动容器会对第一次初始化过的存在redis中的
    * 数据重新覆盖，所以要解决避免第二次启动容器出现覆盖
    * */
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        System.out.println("redis数据初始化操作----------------");
        //获取表中攻略数据
        List<Strategy> list = strategyService.list();
        //遍历攻略集合，将获取到的每个攻略对象中数据设置到vo对象中（同属性）
        for (Strategy strategy : list) {
            //可以通过vo对象来进行判断是否要初始化操作，如果vo对象存在，说明已经初始化，直接跳过这个方法
            if(strategyRedisService.isVoExits(strategy.getId())){
                continue;
            }


            StrategyStatisVO vo = new StrategyStatisVO();
            BeanUtils.copyProperties(strategy,vo);
            vo.setStrategyId(strategy.getId());
            //将对应的vo对象存入redis中
            strategyRedisService.setStringStratisVo(vo);
        }


    }
}
